package objectoriented2;
/*
招聘学生助理
 */

class 学生{
    void openDoor(){
        System.out.println("开门");
    }
    void lockDoor(){
        System.out.println("锁门");
    }
}
class 研究生 extends 学生{
    //重写
    @Override
    void openDoor() {
        super.openDoor();
        System.out.println("打扫卫生");
    }
    //子类自己特有的方法
    void answerQuestion(){
        System.out.println("答疑");
    }
}
public class TestDuotai {
    public static void main(String[] args) {
        //声明需要实验室助理,实际招聘回来的new出来的是研究生
        //研究生是学生的子类
        //实验室助理有2种类型，声明类型是父类类型=学生，实际类型是子类类型=研究生
        学生 实验室助理=new 研究生() ;
        //多态对象实验室助理的使用
        实验室助理.openDoor();//子类研究生的方法，父类学生的方法
        //1-多态对象运行的时候按照实际类型使用
        //多态对象执行子类添加的方法答疑的方法
        //2-多态对象在编译的时候按照声明类型，语法的检测按照声明类型
        //如果要使用多态对象子类中的方法（实际类型中的方法）---强制类型转换
        //强转前提，就是实验室助理确实是研究生类型，强转成研究生类型
        //判断，对象所属类型
        if(实验室助理 instanceof 研究生 ){
            //是研究生类型，强转
            ((研究生)实验室助理) .answerQuestion();
        }

    }
}
